@ExtendWith(PactConsumerTestExt.class)
public class ItemsPactConsumerTest {

    @Pact(consumer = "Usługa zamówień", provider = "PIMService")
    RequestResponsePact getAvailableItemDetails(PactDslWithProvider builder) { 
        return builder.given("towary są dostępne")
            .uponReceiving("pobierz szczegóły towaru")
            .method("GET")
            .path("/items")
            .willRespondWith()
            .status(200)
            .headers(Map.of("Content-Type", "application/json; charset=utf-8")) 
            .body(newJsonArrayMinLike(2, array ->
                array.object(object -> {
                    object.stringType("SKU", "A091897654");
                    object.stringType("Color", "Green");
                    object.stringType("Size", "S");
                })
            ).build())
            .toPact();
}

@Test
@PactTestFor(pactMethod = "getAvailableItemDetails")
void getItemDetailsWhenItemsAreAvailable(MockServer mockServer) { 

    // wywołuje zaślepkę punktu końcowego PIM /items zgodnie z opisem
    // powyższej metody pact
    RestTemplate restTemplate = new RestTemplateBuilder()
            .rootUri(mockServer.getUrl())
            .build();

List<Item> items = new PIMService(restTemplate).getAvailableItemDetails(); 
Item item1 = new Item("A091897654","Zielony","S");
Item item2 = new Item("A091897654","Zielony","S");
List<Item> expectedItems = List.of(item1, item2);
assertEquals(expectedItems, items);
}
